package com.szjz.elasticsearch.eshelper.base.wrapper.service;


import com.szjz.elasticsearch.eshelper.page.Page;
import com.szjz.elasticsearch.eshelper.wrapper.ESQueryWrapper;

import java.util.Date;
import java.util.List;
import java.util.Map;


/**
 * @author 史博
 * @desc 通过包装类查询返回map结果
 * @date 2021/2/16 11:48 周二
 */
public interface MapWrapperService<T> extends MonthWrapperService<T> {


	/**
	 * 通过包装类查询集合
	 *
	 * @param wrapper 将要查询的条件封装到wrapper中
	 * @return 数据集合 默认最大文档数据为100000
	 */
	List<Map<String, Object>> selectMap(ESQueryWrapper<T> wrapper);

	/**
	 * 通过包装类查询按天分片的索引库集合
	 *
	 * @param wrapper 将要查询的条件封装到wrapper中
	 * @param date    索引库对应的分片时间
	 * @return 某一天的数据集合
	 */
	List<Map<String, Object>> selectMap(ESQueryWrapper<T> wrapper, Date date);


	/**
	 * 通过包装类查询按天分片的索引库集合
	 *
	 * @param wrapper   将要查询的条件封装到wrapper中
	 * @param startDate 开始时间
	 * @param endDate   结束时间
	 * @return 某一时间段的数据集合
	 */
	List<Map<String, Object>> selectMap(ESQueryWrapper<T> wrapper, Date startDate, Date endDate);

	/**
	 * 通过包装类查询集合
	 *
	 * @param wrapper 将要查询的条件封装到wrapper中
	 * @param size    返回结果集的最大数量
	 * @return 数据集合
	 */
	List<Map<String, Object>> selectMap(ESQueryWrapper<T> wrapper, Integer size);

	/**
	 * 通过包装类查询按天分片的索引库集合
	 *
	 * @param wrapper 将要查询的条件封装到wrapper中
	 * @param date    索引库对应的分片时间
	 * @param size    返回结果集的最大数量
	 * @return 某一天的数据集合
	 */
	List<Map<String, Object>> selectMap(ESQueryWrapper<T> wrapper, Date date, Integer size);

	/**
	 * 通过包装类查询按天分片的索引库集合
	 *
	 * @param wrapper   将要查询的条件封装到wrapper中
	 * @param startDate 开始时间
	 * @param endDate   结束时间
	 * @param size      返回结果集的最大数量
	 * @return 某一时间段的数据集合
	 */
	List<Map<String, Object>> selectMap(ESQueryWrapper<T> wrapper, Date startDate, Date endDate, Integer size);

	/**
	 * 分页查询-通过包装类查询集合
	 *
	 * @param wrapper  将要查询的条件封装到wrapper中
	 * @param pageNum  当前页
	 * @param pageSize 每页容量
	 * @return 分页map
	 */
	Page<Map<String, Object>> pageMap(ESQueryWrapper<T> wrapper, Integer pageNum, Integer pageSize);

	/**
	 * 分页查询-通过包装类查询集合
	 *
	 * @param wrapper   将要查询的条件封装到wrapper中
	 * @param indexName 索引库名称
	 * @param pageNum   当前页
	 * @param pageSize  每页容量大小
	 * @return 分页map
	 */
	Page<Map<String, Object>> pageMap(ESQueryWrapper<T> wrapper, String indexName, Integer pageNum, Integer pageSize);

	/**
	 * 分页查询-通过包装类查询集合
	 * 适用于按天分片
	 *
	 * @param wrapper  将要查询的条件封装到wrapper中
	 * @param date     时间
	 * @param pageNum  当前页
	 * @param pageSize 每页容量大小
	 * @return 分页map
	 */
	Page<Map<String, Object>> pageMap(ESQueryWrapper<T> wrapper, Date date, Integer pageNum, Integer pageSize);

	/**
	 * 分页查询-通过包装类查询集合
	 * 适用于按天分片
	 *
	 * @param wrapper   将要查询的条件封装到wrapper中
	 * @param startDate 开始时间
	 * @param endDate   结束时间
	 * @param pageNum   当前页
	 * @param pageSize  每页容量大小
	 * @return 分页map
	 */
	Page<Map<String, Object>> pageMap(ESQueryWrapper<T> wrapper, Date startDate, Date endDate, Integer pageNum, Integer pageSize);


}
